package main

/**
* @Author: DengLibin
* @Date: Create in 2023-01-16 17:24:29
* @Description: 349. 两个数组的交集
给定两个数组 nums1 和 nums2 ，返回 它们的交集 。
输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序
示例 1：

输入：nums1 = [1,2,2,1], nums2 = [2,2]
输出：[2]
示例 2：

输入：nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出：[9,4]
解释：[4,9] 也是可通过的
*/
func intersection(nums1 []int, nums2 []int) []int {

	arrMin := nums1
	arrMax := nums2
	if len(nums1) > len(nums2) {
		arrMin = nums2
		arrMax = nums1
	}
	l := len(arrMin)
	m := make(map[int]bool, l)

	for i := 0; i < l; i++ {
		m[arrMin[i]] = false
	}

	for i := 0; i < len(arrMax); i++ {
		_, has := m[arrMax[i]]
		if has {
			m[arrMax[i]] = true
		}
	}

	arr := make([]int, 0, l)
	for k, v := range m {
		if v {
			arr = append(arr, k)

		}
	}
	return arr

}
